/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#ifndef DEF_JIT

#include "../结构数据.h"
#include <矩阵.h>
#include "引擎数据类型.h"

#else

//typedef struct vec3;
//typedef struct vec4;

#endif // !DEF_JIT

#include "core/属性.h"



EngineAPI_EXPORT S_Vec3Array* f_vec3_array_alloc(uint64 num);

EngineAPI_EXPORT S_F32Array* f_f32_array_过度函数_从CXX_alloc(void* data);
EngineAPI_EXPORT S_F32Array* f_f32_array_fromF32_alloc(float32 data);
EngineAPI_EXPORT S_F32Array* f_f32_array_fromI32_alloc(S_I32Array* data);

EngineAPI_EXPORT S_Vec2Array* f_vec2_array_fromV_alloc(float32* data);
EngineAPI_EXPORT S_Vec2Array* f_vec2_array_fromV3s_alloc(S_Vec3Array* data);

EngineAPI_EXPORT S_Vec3Array* f_vec3_array_过度函数_从CXX_alloc(void* data);
EngineAPI_EXPORT S_Vec3Array* f_vec3_array_fromV3_alloc(vec3 data);
EngineAPI_EXPORT S_Vec3Array* f_vec3_array_fromV4_alloc(vec4 data);

EngineAPI_EXPORT S_Vec4Array* f_vec4_array_fromV3_alloc(vec3 data);
EngineAPI_EXPORT S_Vec4Array* f_vec4_array_fromV4_alloc(vec4 data);
EngineAPI_EXPORT S_Vec4Array* f_vec4_array_fromV3s_alloc(S_Vec3Array* data);

EngineAPI_EXPORT Mat44f			f_Mat44_array_formMat44Array(S_Mat44Array* mats);
EngineAPI_EXPORT S_Mat44Array*	f_Mat44_array_fromMat44_alloc(const Mat44f& data);
EngineAPI_EXPORT S_Mat44Array*	f_Mat44_array_fromMat44_alloc_过度函数(void* data);

EngineAPI_EXPORT S_边Array* f_Edge1D_array_fromEdge_alloc(S_边* data);

EngineAPI_EXPORT void f_f32_array_步进(S_F32Array* a, const vec2& r);
EngineAPI_EXPORT void f_f32_array_随机(S_F32Array* a, const vec2& r, bool 覆盖);

EngineAPI_EXPORT S_ElementSelect*      f_array_元素选择_alloc();
EngineAPI_EXPORT S_ElementSelectArray* f_array_元素选择数组_alloc();
EngineAPI_EXPORT void                  f_array_元素选择数组_resize(S_ElementSelectArray* es, uint32 num);

EngineAPI_EXPORT void f_vec_取矢量分量(const S_Vec3Array* 矢量, const S_I8Array* 索引, S_F32Array* 分量, const S_Props& m_分量类型);

EngineAPI_EXPORT void f_omp_set_num_threads(uint32 循环次数, const S_Props& 线程数量);
EngineAPI_EXPORT void f_omp_set_threadsNum(uint32 线程数量);






//#define DEF_Vec3